首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >http post在android应用程序中不起作用

http post在android应用程序中不起作用
EN

Stack Overflow用户
提问于 2015-12-29 14:48:51
回答 3查看 98关注 0票数 0

我是android开发的新手。我正在尝试创建一个应用程序来扫描二维码字符串,并在web服务器上发布相同的内容。我在错误中收到警告,“MainActivity”中的“post”方法签名不正确,并且在单击post按钮时,我收到错误消息:在定义的android:onClick属性的父级或祖先上下文中找不到post(java.lang.IllegalStateException)方法。

如何解决方法中签名错误的问题?

如何在方法中传递两个变量?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public class MainActivity extends AppCompatActivity {

static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN";
public String contents;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    //set the main content layout of the Activity
    setContentView(R.layout.activity_main);
}

//product qr code mode
public void Scan(View v) {
    try {
        //start the scanning activity from the        com.google.zxing.client.android.SCAN intent
        Intent intent = new Intent(ACTION_SCAN);
        intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
        startActivityForResult(intent, 0);
    } catch (ActivityNotFoundException anfe) {
        //on catch, show the download dialog
        showDialog(MainActivity.this, "No Scanner Found", "Download a   scanner code activity?", "Yes", "No").show();
    }
}

//alert dialog for downloadDialog
private static AlertDialog showDialog(final Activity act, CharSequence  title, CharSequence message, CharSequence buttonYes, CharSequence buttonNo) {
        AlertDialog.Builder downloadDialog = new AlertDialog.Builder(act);
    downloadDialog.setTitle(title);
    downloadDialog.setMessage(message);
    downloadDialog.setPositiveButton(buttonYes, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int i) {
            Uri uri = Uri.parse("market://search?q=pname:" + "com.google.zxing.client.android");
            Intent intent = new Intent(Intent.ACTION_VIEW, uri);
            try {
                act.startActivity(intent);
            } catch (ActivityNotFoundException anfe) {

            }
        }
    });
    downloadDialog.setNegativeButton(buttonNo, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialogInterface, int i) {
        }
    });
    return downloadDialog.show();
}

public void onActivityResult(int requestCode, int resultCode, Intent intent)     {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
            String contents = intent.getStringExtra("SCAN_RESULT");

            EditText resultTxt = (EditText) findViewById(R.id.contents);
            resultTxt.setText(contents);
            resultTxt.setVisibility(View.VISIBLE);
        }

    }

 }

public void post(View view, Intent intent) {

                String contents = intent.getStringExtra("SCAN_RESULT");
                new JSONtask().execute(contents);

            }


    public class JSONtask extends AsyncTask<String, String, Void> {

    @Override
    protected Void doInBackground(String... params) {

      try {

            // 1. URL
            URL url = new URL("http://192.168.1.10:8080/SRNSmartLab/rest/service/storeNEdata");
            final String contents = params[0];
            // 2. Open connection
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();

            // 3. Specify POST method
            conn.setRequestMethod("POST");

            // 4. Set the headers
            conn.setRequestProperty("Content-Type", "application/json");
            conn.setDoOutput(true);

            // 5. Add JSON data into POST request body


            //`5.1 Use Jackson object mapper to convert Contnet object into   JSON
            //ObjectMapper mapper = new ObjectMapper();

                // 5.2 Get connection output stream
               DataOutputStream wr = new DataOutputStream(conn.getOutputStream());

            // 5.3 Copy Content "JSON" into
           wr.writeBytes(contents);

            // 5.4 Send the request
            wr.flush();

            // 5.5 close
            wr.close();

            // 6. Get the response
            int responseCode = conn.getResponseCode();
            System.out.println("\nSending 'POST' request to URL : " + url);
            System.out.println("Response Code : " + responseCode);

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            // 7. Print result
            System.out.println(response.toString());

        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

        return null;
    }

}

}

这是布局代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    tools:context="com.lab.smart.smartlabinventry.MainActivity"
    tools:showIn="@layout/activity_main"
    android:background="#143de0">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Scan"
        android:id="@+id/textView"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:textColor="#faf6f6"
    android:textSize="30sp"/>

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/Scan1"
        android:id="@+id/button"
        android:onClick="Scan"
        android:layout_above="@+id/spinner"
        android:layout_toRightOf="@+id/contents"
        android:layout_toEndOf="@+id/contents" />

    <Spinner
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/spinner"
        android:layout_centerVertical="true"
        android:layout_alignRight="@+id/button2"
        android:layout_alignEnd="@+id/button2" />
    <EditText
        android:id="@+id/contents"
        android:editable="false"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_below="@id/spinner"
        android:textColor="#fdf9f9"
        android:layout_marginTop="15dp"
        android:visibility="gone"
        />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/upload"
        android:id="@+id/button2"
        android:onClick="post"
        android:layout_alignTop="@+id/button"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true" />

</RelativeLayout>

EN

回答 3

Stack Overflow用户

发布于 2015-12-29 15:54:17

你的错误清楚地定义了你的错误

java.lang.IllegalStateException:在定义的android:onClick属性的父上下文或祖先上下文中找不到方法post(视图)。

您已经从button2调用了post(),它将调用post(View view),您希望调用post(View view, Intent intent).If,您想调用post(View view, Intent intent),然后添加该按钮的clicklistener,并从该按钮调用您的方法。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
btnPost.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        post(view,intent);
    }
});

票数 1
EN

Stack Overflow用户

发布于 2015-12-29 15:56:33

How exactly does the android:onClick XML attribute differ from setOnClickListener?

查看上面的答案,然后转到您的声明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public void post(View view, Intent intent) {

从方法签名中删除第二个参数,至少有一个错误可以解决

票数 0
EN

Stack Overflow用户

发布于 2015-12-29 16:07:02

不能,一个OnClickListener不能有两个参数。

为了解决您的问题,只需将扫描结果存储为成员变量即可,您已有成员变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public String contents;

然后,在onActivityResult中,将结果设置为成员变量,而不是局部变量:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  public void onActivityResult(int requestCode, int resultCode, Intent intent)     {
    if (requestCode == 0) {
        if (resultCode == RESULT_OK) {
             //modified:
            contents = intent.getStringExtra("SCAN_RESULT");

            EditText resultTxt = (EditText) findViewById(R.id.contents);
            resultTxt.setText(contents);
            resultTxt.setVisibility(View.VISIBLE);
        }

    }

 }

然后,在post()方法中,只需确保contents不为空:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        public void post(View view) {

            if (contents != null) {
                new JSONtask().execute(contents);
            }

        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34513423

复制
相关文章
Jenkins 更新中心证书更新
2021 年 3 月 29 日,我们会更新 Jenkins 更新中心的证书。当前的证书将会于 2021 年 4 月过期。当新证书启用后,Jenkins 2.178 之前的版本(2018 年)就无法与默认的更新中心以及实验性更新中心通讯。对于自行部署的更新中心,则不会收到影响。对于插件更新,更新中心会支持一年内的 Jenkins core 的版本,2.204 就是最老的版本。
LinuxSuRen
2021/04/13
1.1K0
Jenkins 更新中心证书更新
ubuntu18.04更新内核_如何查看linux系统内核版本
deb http://security.ubuntu.com/ubuntu trusty-security main
全栈程序员站长
2022/09/25
3K0
ubuntu18.04更新内核_如何查看linux系统内核版本
在线更新ingress证书
在线编辑ingress,替换secretName的值由ingress-secret2020,替换为ingress-secret2021,保存生效
三杯水Plus
2020/07/17
1.1K0
更新Kubernetes APIServer证书
本文我们将了解如何将一个新的 DNS 名称或者 IP 地址添加到 Kubernetes APIServer 使用的 TLS 证书中。在某些情况下默认的证书包含的名称可能不能满足我们的要求,又或者是 APIServer 地址有所变化,都需要重新更新证书。
CNCF
2020/09/04
3.6K0
更新Kubernetes APIServer证书
kubernetes集群证书更新
kubeadm配置的集群默认的证书是1年,到期后证书升级是个很麻烦的事情。,该脚本可将kubeadm生成的证书有效期更新为10年
jwangkun
2021/12/23
1.5K0
更新 Kubernetes APIServer 证书
本文我们将了解如何将一个新的 DNS 名称或者 IP 地址添加到 Kubernetes APIServer 使用的 TLS 证书中。在某些情况下默认的证书包含的名称可能不能满足我们的要求,又或者是 APIServer 地址有所变化,都需要重新更新证书。
我是阳明
2020/09/04
1.2K0
如何更新Linux内核来提升系统性能?
Linux内核的开发速度是前所未有的,大概每二三个月就会有一个新的主要版本发布。每次发布都带来了几项新的功能和改进,许多人可以充分利用它们,让计算体验更快、更高效或者有其他方面的提升。
用户8710806
2021/06/09
9200
CentOS6内核太老更新内核
title: CentOS6内核太老更新内核 date: 2020-04-01 23:31:42 tags: [CentOS] categories: [CentOS]
JaneYork
2023/10/11
4590
CentOS6内核太老更新内核
如何更新Linux内核来提升系统性能?
Linux内核的开发速度是前所未有的,大概每二三个月就会有一个新的主要版本发布。每次发布都带来了几项新的功能和改进,许多人可以充分利用它们,让计算体验更快、更高效或者有其他方面的提升。
用户8710806
2021/06/11
1.3K0
如何更新 Linux 内核来提升系统性能
目前的 Linux 内核的开发速度是前所未有的,大概每2到3个月就会有一个主要的版本发布。每个发布都带来几个的新的功能和改进,可以让很多人的处理体验更快、更有效率、或者其它的方面更好。
用户8710643
2021/06/09
9580
如何给驱动程序签名?怎么做微软WHQL认证?
从 Windows Vista 开始,基于 x64 的 Windows 版本要求在内核模式下运行的所有软件(包括驱动程序)进行数字签名才能加载。未签名的驱动程序被系统阻止,数字签名可确保驱动程序已由受信任的开发人员或供应商发布,并且其代码未被修改。
沃通WoTrus数字证书
2023/03/14
1.1K0
如何给驱动程序签名?怎么做微软WHQL认证?
linux更新内核版本
首先声明一下为什么要更新linux内核版本: 每一个idc服务商都采用的不是最新的源,但会是最稳定的源,我们更新内核版本就和更新病毒库一样,更新一下最好,不想更新的也无所谓,毕竟idc服务商会及
Youngxj
2018/06/07
6.7K0
为什么反作弊软件利用内核驱动程序
最近,在Reddit上有很多话题涉及Valorant被称为“ Vanguard”的反恐热的发布。主要的怀疑是事实,它是潜在地侵犯隐私的,这是一个完全有效的理论。我并没有破坏在您的个人计算机上运行第三方应用程序后的隐私复杂性,但是有关在用户模式和内核模式下进行监视的可能性的许多信息都是有缺陷的。很少有张贴者反对“内核=坏”蜂巢,但是大多数游戏玩家从安全性方面都不知道这意味着什么。
franket
2020/11/03
18.5K0
debian10更新内核_debian升级内核
http://blog.csdn.net/ctbinzi/article/details/6006931
全栈程序员站长
2022/11/02
2.8K0
将hello程序作为驱动程序编译进系统内核
恩,可能是我比较愚钝,一个内核编译搞了一天,各种问题,各种bug,几度无奈,也是因为我突发奇想,并没有按照原来的那种操作,我直接把helloworld程序放到内核模块中编译成了一个驱动程序,虽然其中遇到了不知道多少的问题,不过最终是个完美的结局,给自己点个赞! 好了,废话不多说,直接开始还原我的helloworld驱动内核程序编译流程。
roobtyan
2019/02/21
1.5K0
将hello程序作为驱动程序编译进系统内核
如何在知行之桥EDI系统中配置更新证书
在EDI系统中与交易伙伴实现数据传输时为保证数据的安全性,需要使用一对数字证书对数据进行签名和加密,但是在申请或购买证书时会给证书一个有限期,证书到期时,您需要重新申请或购买新的证书进行更新,那么在知行之桥中如何配置和更新证书呢?本文将介绍如何在知行之桥系统中配置和更新自己的证书,以及交易伙伴的证书。
知行软件EDI
2022/05/30
6710
如何在知行之桥EDI系统中配置更新证书
通过更新API证书解决云支付证书过期问题
服务商平均每年会遇到一个问题,即云支付的商户所拥有门店在进行退款时提示“证书已过期”。
Daqu
2020/10/16
2K0
通过更新API证书解决云支付证书过期问题
Ubuntu 14.04 16.04 Linux nvidia 驱动下载与安装
但是有时候,驱动不够新,比如14.04用的是340.98版本,如果手动安装驱动可以参考官网指南。
zhangrelay
2019/01/23
4.3K0
点击加载更多

相似问题

使用自签名证书的内核模式驱动程序签名

17

简单内核模式驱动程序

24

内核模式和用户模式驱动程序

12

内核模式驱动程序与IOCTL

112

Windows内核模式驱动程序开发

18
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文