Java 将数据从设备发送到远程服务器

Java 将数据从设备发送到远程服务器,java,android,Java,Android,我的应用程序正在将两个值从设备传递到远程服务器,但当我在bluestack中测试时,它工作正常。当我在真实设备中安装时,它显示一条消息,如不幸的是,应用程序已损坏,所以我无法理解问题所在。我删除并清理设备临时内存,设备的缓存仍无法获得输出 下面是我的源代码 package com.androidexample.httpgetexample; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; imp

我的应用程序正在将两个值从设备传递到远程服务器,但当我在bluestack中测试时,它工作正常。当我在真实设备中安装时,它显示一条消息,如不幸的是,应用程序已损坏,所以我无法理解问题所在。我删除并清理设备临时内存,设备的缓存仍无法获得输出

下面是我的源代码

package com.androidexample.httpgetexample;

import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import org.apache.http.client.HttpClient;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

import android.os.Bundle;
import android.app.Activity;
import android.util.Log;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;  
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class HttpGetAndroidExample extends Activity {

    TextView content;
    EditText fname,email,login,pass;
    Spinner sp;
    Button b1;
    String s[] = { "Courtage Problem", "Cartage Refil", "Printer Problem",
    "Printer Drivers" };


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_http_get_android_example);

        content = (TextView)findViewById(R.id.content);
        fname   = (EditText)findViewById(R.id.name);
        sp  = (Spinner)findViewById(R.id.spinner1);
        ArrayAdapter<String> ad = new ArrayAdapter<String>(this,
        android.R.layout.simple_list_item_1, s);
        sp.setAdapter(ad);
        ad.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

        Button saveme=(Button)findViewById(R.id.save);


        saveme.setOnClickListener(new Button.OnClickListener(){
            public void onClick(View v)
            {   
                //ALERT MESSAGE
                Toast.makeText(getBaseContext(),
                        "Please wait, connecting to server.",
                        Toast.LENGTH_LONG).show();
            try{    

                String n = URLEncoder.encode(fname.getText().toString(), "UTF-8");
                String d = URLEncoder.encode(sp.getSelectedItem().toString(), "UTF-8");

                    HttpClient Client = new DefaultHttpClient();
                    String URL = "http://shreebijapur.in/Customerquery.aspx?n="+n+"&d="+d;

                    //Log.i("httpget", URL);
                    try
                    {
                        HttpGet httpget = new HttpGet(URL);
                        ResponseHandler<String> responseHandler = new BasicResponseHandler();

                        String SetServerString = "";
                        SetServerString = Client.execute(httpget, responseHandler);
                        content.setText(SetServerString);
                    }
                    catch(Exception ex)
                    {
                        content.setText("Fail!");
                    }
                }
                catch(UnsupportedEncodingException ex)
                {
                    content.setText("Fail111");
                }       
            }
        });  
    }
}

它可能由于NetworkOnMainThread异常而崩溃。我试图在扩展类AsyncTask的内部类中执行http请求

我将所有与网络相关的内容都放在doInBackground方法中。

如果错误:networkOnMainThreadException

在扩展类AsyncTask的内部类中执行http请求执行

试试这个 或
您可以使用volley、Reformation或其他网络库进行API调用。

您可以发布崩溃日志的堆栈跟踪日志猫消息。.使用volley将数据从设备发布到服务器。
new AsyncTask<Void, Void, Void>() {

            @Override
            protected void onPreExecute() {
                super.onPreExecute();
            }

            @Override
            protected Void doInBackground(Void... params) {
               // HERE_YOUR_HTTP_REQUEST CODE
                return null;
            }

            @Override
            protected void onPostExecute(Void aVoid) {
                super.onPostExecute(aVoid);

            }
        }.execute();