2016-06-25 88 views
-1

我是Android开发新手,我需要一些帮助HttpURLConnection如何从我的Android应用发送http GET请求并检查响应

我想要做的是发送http获取请求(通过单击按钮),然后检查响应(检查响应我添加TextView到我的主要活动)。

我的代码:

public class MainActivity extends AppCompatActivity { 

private ProgressDialog progress; 

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

public void sendGetRequest(View View) { 
    new GetClass(this).execute(); 
} 

private class GetClass extends AsyncTask<String, Void, Void> { 

    private final Context context; 

    public GetClass(Context c){ 
     this.context = c; 
    } 

    protected void onPreExecute(){ 
     progress= new ProgressDialog(this.context); 
     progress.setMessage("Loading"); 
     progress.show(); 
    } 

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

     String dataUrl = "http://myurl.com"; 
     String dataUrlParameters = "email="+"[email protected]"+"&name="+"priyabrat"; 
     URL url; 
     HttpURLConnection connection = null; 

     try { 
      final TextView outputView = (TextView) findViewById(R.id.showOutput); 
      url = new URL(dataUrl); 

      connection = (HttpURLConnection) url.openConnection(); 
      String urlParameters = "fizz=buzz"; 
      connection.setRequestMethod("GET"); 
      connection.setRequestProperty("USER-AGENT", "Mozilla/5.0"); 
      connection.setRequestProperty("ACCEPT-LANGUAGE", "en-US,en;0.5"); 

      int responseCode = connection.getResponseCode(); 

      final StringBuilder output = new StringBuilder("Request URL " + url); 
      output.append(System.getProperty("line.separator") + "Response Code " + responseCode); 
      output.append(System.getProperty("line.separator") + "Type " + "GET"); 
      BufferedReader br = new BufferedReader(new InputStreamReader(connection.getInputStream())); 
      String line = ""; 
      StringBuilder responseOutput = new StringBuilder(); 
      System.out.println("output===============" + br); 
      while((line = br.readLine()) != null) { 
       responseOutput.append(line); 
      } 
      br.close(); 

      output.append(System.getProperty("line.separator") + "Response " + System.getProperty("line.separator") + System.getProperty("line.separator") + responseOutput.toString()); 

      MainActivity.this.runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        outputView.setText(output); 
        progress.dismiss(); 

       } 
      }); 

     } catch (MalformedURLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 
} 

}

问题是,当我运行我的应用程序,然后单击按钮“发送GET请求”,应用程序与消息停止“应用程序已停止”

+0

首先添加的到变量dataUrl – has19

+0

末尾的url,并删除findviewbyid,因为您只能访问主线程 – has19

+0

中的视图并重写在主线程上运行的onPostExecute方法,您可以在其中修改视图 – has19

回答

0

看一看一些网络图书馆的针对Android,他们将处理异步的东西给你:

如果你想为自己做的,看看从异步任务( https://developer.android.com/reference/android/os/AsyncTask.html)的数独和使用功能:

onPostExecute(String output) 

后回UI线程调用上地面计算完成。后台计算的结果作为参数传递给此步骤。

,而不是和:

MainActivity.this.runOnUiThread(new Runnable() { 

    @Override 
    public void run() { 
     outputView.setText(output); 
     progress.dismiss(); 
    } 
}); 

使这个: '?'

return output; 
+0

欢迎您! – Botz

相关问题