>”); System.out.println(“长度”+结果长度); 对于(i=0;i,java,android,multithreading,httprequest,Java,Android,Multithreading,Httprequest" /> >”); System.out.println(“长度”+结果长度); 对于(i=0;i,java,android,multithreading,httprequest,Java,Android,Multithreading,Httprequest" />

Java 在Android中使用多个类之间的Http响应? 类XXX实现可运行 { 字符串lat、lon、str、taluka_名称; int名称; HttpResponse响应; http实体; InputStream=null; 吐司s1; StringBuilder sb=null; 文本视图v; 纺纱机; 公共字符串结果[]; 文本视图电视; 线性布局ll1; int i; ArrayList croplist; 公共XXX(字符串t\n、字符串[]res、线性布局ll、文本视图tv1) { croplist=新的ArrayList(); taluka_name=t_n; 结果=res; ll1=ll; tv=tv1; } @凌驾 公开募捐{ //TODO自动生成的方法存根 HttpClient HttpClient=新的DefaultHttpClient(); HttpPost请求=新建HttpPost(“http://10.0.2.2/proagri115.php"); Listlogin=newarraylist(); 添加(新的BasicNameValuePair(“位置”,taluka_名称)); 尝试 { UrlEncodedFormEntity实体=新的UrlEncodedFormEntity(登录); 请求。设置实体(实体); } 捕获(不支持的编码异常e) { //TODO自动生成的捕捉块 e、 printStackTrace(); } 尝试 { response=httpclient.execute(请求); entity=response.getEntity(); is=entity.getContent(); System.out.println(“已执行请求”); } 捕获(客户端协议例外e) { //TODO自动生成的捕捉块 e、 printStackTrace(); } 捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); e、 printStackTrace(); System.out.println(“”); } 捕获(例外e) { } 试一试{ BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8; sb=新的StringBuilder(); sb.append(reader.readLine()+“\n”); 字符串行=“0”; 而((line=reader.readLine())!=null) { sb.追加(第+行“\n”); } is.close(); str=sb.toString(); Log.e(“Log_标记”,“成功转换结果”+sb.toString()); } 捕获(例外e) { Log.e(“Log_标记”,“错误转换结果”+e.toString()); System.out.println(str+“我已经执行”); 结果=str.split(“>>”); System.out.println(“长度”+结果长度); 对于(i=0;i

Java 在Android中使用多个类之间的Http响应? 类XXX实现可运行 { 字符串lat、lon、str、taluka_名称; int名称; HttpResponse响应; http实体; InputStream=null; 吐司s1; StringBuilder sb=null; 文本视图v; 纺纱机; 公共字符串结果[]; 文本视图电视; 线性布局ll1; int i; ArrayList croplist; 公共XXX(字符串t\n、字符串[]res、线性布局ll、文本视图tv1) { croplist=新的ArrayList(); taluka_name=t_n; 结果=res; ll1=ll; tv=tv1; } @凌驾 公开募捐{ //TODO自动生成的方法存根 HttpClient HttpClient=新的DefaultHttpClient(); HttpPost请求=新建HttpPost(“http://10.0.2.2/proagri115.php"); Listlogin=newarraylist(); 添加(新的BasicNameValuePair(“位置”,taluka_名称)); 尝试 { UrlEncodedFormEntity实体=新的UrlEncodedFormEntity(登录); 请求。设置实体(实体); } 捕获(不支持的编码异常e) { //TODO自动生成的捕捉块 e、 printStackTrace(); } 尝试 { response=httpclient.execute(请求); entity=response.getEntity(); is=entity.getContent(); System.out.println(“已执行请求”); } 捕获(客户端协议例外e) { //TODO自动生成的捕捉块 e、 printStackTrace(); } 捕获(IOE异常){ //TODO自动生成的捕捉块 e、 printStackTrace(); e、 printStackTrace(); System.out.println(“”); } 捕获(例外e) { } 试一试{ BufferedReader reader=新的BufferedReader(新的InputStreamReader(is,“iso-8859-1”),8; sb=新的StringBuilder(); sb.append(reader.readLine()+“\n”); 字符串行=“0”; 而((line=reader.readLine())!=null) { sb.追加(第+行“\n”); } is.close(); str=sb.toString(); Log.e(“Log_标记”,“成功转换结果”+sb.toString()); } 捕获(例外e) { Log.e(“Log_标记”,“错误转换结果”+e.toString()); System.out.println(str+“我已经执行”); 结果=str.split(“>>”); System.out.println(“长度”+结果长度); 对于(i=0;i,java,android,multithreading,httprequest,Java,Android,Multithreading,Httprequest,,您至少需要使用Thread.join来等待线程完成..但这会阻塞您的UI线程,这是非常糟糕的。您应该使用android方式并使用异步任务来执行此操作 请阅读以下内容: 以下是您应该做的: class XXX implements Runnable { String lat,lon,str,taluka_name; int name; HttpResponse response; HttpEntity entity; InputStream is = null; Toast s1; Stri

,您至少需要使用Thread.join来等待线程完成..但这会阻塞您的UI线程,这是非常糟糕的。您应该使用android方式并使用异步任务来执行此操作 请阅读以下内容:

以下是您应该做的:

class XXX implements Runnable
{

String lat,lon,str,taluka_name;
int name;
HttpResponse response;
HttpEntity entity;
InputStream is = null;
Toast s1;
StringBuilder sb=null;
TextView v;
Spinner s;
public String result[];
TextView tv;
LinearLayout ll1;
int i;
ArrayList<Integer> croplist;

public XXX(String t_n,String [] res,LinearLayout ll,TextView tv1)
{
    croplist= new ArrayList<Integer>();
    taluka_name = t_n;
    result = res;
    ll1= ll;
    tv = tv1;
}
@Override
public void run() {
    // TODO Auto-generated method stub
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost request = new HttpPost("http://10.0.2.2/proagri115.php");
    List<NameValuePair>login=new ArrayList<NameValuePair>();
    login.add(new BasicNameValuePair("location", taluka_name));
    try 
    {
        UrlEncodedFormEntity entity=new UrlEncodedFormEntity(login);
        request.setEntity(entity);
    } 
    catch (UnsupportedEncodingException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    try 
    {
        response = httpclient.execute(request);
        entity = response.getEntity();
        is = entity.getContent();
        System.out.println("Executed the request");
    } 
    catch (ClientProtocolException e) 
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        e.printStackTrace();
        System.out.println("");
    }
    catch(Exception e)
    {

    }
    try{
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8);
            sb = new StringBuilder();
            sb.append(reader.readLine() + "\n");
            String line="0";
            while ((line = reader.readLine()) != null) 
            {
                sb.append(line + "\n");
            }
            is.close();
            str=sb.toString();
            Log.e("log_tag", "Success converting result "+sb.toString());
        }
     catch(Exception e)
        {
            Log.e("log_tag", "Error converting result  "+e.toString());

    System.out.println(str+"I have executed");
    result = str.split(">>");
    System.out.println("length"+result.length);
    for(i=0;i<result.length;i++)
    {
        System.out.println("\n"+i+"=="+result[i]);
    }

    System.out.println("Notified");
   }

   }
   }





public class help extends Activity{
int j;
Intent i;
String s,taluka_name;
EditText edt,edt1,edt2;
Double lat,lon;
Spinner spin;
String [] re;
TextView tv;
Layout lt;
LinearLayout lt1;
XXX runnable;
public void onCreate(Bundle savedinstancestate)
{
    super.onCreate(savedinstancestate);
    setContentView(R.layout.help);
    lt1 = (LinearLayout)findViewById(R.id.ll1);
    s =(String)getIntent().getSerializableExtra("Rainfall");
    taluka_name =(String)getIntent().getSerializableExtra("location");
    System.out.println(s);
    tv = new TextView(this);
    tv.setText("Crops for Your Selected Area are");
    lt1.addView(tv);
    try
    {   
         runnable = new XXX(taluka_name,re,lt1,tv);
             Thread threadX = new Thread(runnable);
             System.out.println("till this");
             threadX.start();  
             System.out.println("In Waited");
             try 
             {
            wait(500);
             }
              catch (IllegalMonitorStateException e)
             {
            System.out.println("IllegalMonitorStateException");
             }
             catch (InterruptedException e)
             {
            System.out.println("InterruptedException");
             }
            System.out.println("Out of Waited");
    }

    catch(Exception e)
    {
        System.out.println("Error again "+e);
    }
    try{
            System.out.println("Final Result will be");
            for(j=0;j<runnable.result.length;j++)
            {
                tv = new TextView(this);
                tv.setText(runnable.result[j]);
                System.out.println(runnable.result[j]);
                lt1.addView(tv);
            }
    }
    catch(Exception e)
    {

    }

}

}
现在棘手的事情是,您需要将结果返回到UI线程。最简单的方法是将AsyncTask作为内部类放在活动中,然后在AsyncTask的onPostExecute中,您只需从活动中调用一些函数。
如果希望AsyncTask位于单独的文件中,则需要将类的引用传递给AsyncTask的构造函数,然后可以从AsyncTask调用活动的任何公共方法。请记住,只能在onPostExecute和onProgressUpdate中调用activities方法(不要在doInBackground中调用UI方法)

当两个线程需要协作和交换信息时,应该使用同步机制

当HTTP请求在后台线程中完成时,您可以使用将操作发回UI线程,或者更好地在中执行后台工作

以下是一个一般示例:

new XXX(taluka_name,re,lt1,tv).execute();

将参数(类型为
Param
)传递给
execute()
。请注意,这必须在UI线程中完成。

不,这与logcat无关,因为没有错误。它只是在线程XXX完成其操作之前执行main方法,因此我无法在主活动中的线程上使用http响应。您试图在主活动中使用线程结果做什么?更新一些控件?在http响应中e我从数据库中获取一些农作物列表,通过添加主要活动的文本视图显示农作物列表。如果有人知道答案,请快速回复。忘记线程,使用
AsyncTask
。我将在一分钟内更新我的答案,告诉您如何获取代码并将其设置为AsyncTask
new XXX(taluka_name,re,lt1,tv).execute();
private class AsyncTaskExample extends AsyncTask<Param, Progress, Result> {
    @Override
    protected Result doInBackground(Param... params) {
         // Performs some computation in a background thread.
         // Use publishProgress() to publish progress updates which
         // will take place in the UI thread in onProgressUpdate().
         return ...;
    }

    @Override
    protected void onProgressUpdate(Progress... progress) {
        // Update progress information. Run in the UI thread.
    }

    @Override
    protected void onPostExecute(Result result) {
        // Update on completion. Run in the UI thread.
    }
}
new AsyncTaskExample().execute(param1, param2, ...);