2013-01-01 87 views
1

我想从Mainactivity.java调用另一个名为HttpUtilityTester.java的类。 其实我想通过点击一个按钮来测试HttpUtility.java中的HttpUtility.sendPostRequest。 现货标有此评论:“//这里我需要帮助计算器”点击一个按钮调用java类

这是已经添加到我的按钮,在activity_main.xml中:

android:onClick="sendMessage1" 

这里Mainactivity.java:

package com.example.mythirdapp; 


import android.app.Activity; 
import android.os.Bundle; 


public class MainActivity extends Activity { 

        //here I need help from stackoverflow 

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

} 

这里是HttpUtility.java:

package com.example.mythirdapp; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.io.OutputStreamWriter; 
import java.net.HttpURLConnection; 
import java.net.URL; 
import java.net.URLEncoder; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.List; 
import java.util.Map; 

public class HttpUtility { 


     /** 
     * Represents an HTTP connection 
     */ 
     private static HttpURLConnection httpConn; 

     /** 
     * Makes an HTTP request using GET method to the specified URL. 
     * 
     * @param requestURL 
     *   the URL of the remote server 
     * @return An HttpURLConnection object 
     * @throws IOException 
     *    thrown if any I/O error occurred 
     */ 
     public static HttpURLConnection sendGetRequest(String requestURL) 
       throws IOException { 
      URL url = new URL(requestURL); 
      httpConn = (HttpURLConnection) url.openConnection(); 
      httpConn.setUseCaches(false); 

      httpConn.setDoInput(true); // true if we want to read server's response 
      httpConn.setDoOutput(false); // false indicates this is a GET request 

      return httpConn; 
     } 

     /** 
     * Makes an HTTP request using POST method to the specified URL. 
     * 
     * @param requestURL 
     *   the URL of the remote server 
     * @param params 
     *   A map containing POST data in form of key-value pairs 
     * @return An HttpURLConnection object 
     * @throws IOException 
     *    thrown if any I/O error occurred 
     */ 
     public static HttpURLConnection sendPostRequest(String requestURL, 
       Map<String, String> params) throws IOException { 
      URL url = new URL(requestURL); 
      httpConn = (HttpURLConnection) url.openConnection(); 
      httpConn.setUseCaches(false); 

      httpConn.setDoInput(true); // true indicates the server returns response 

      StringBuffer requestParams = new StringBuffer(); 

      if (params != null && params.size() > 0) { 

       httpConn.setDoOutput(true); // true indicates POST request 

       // creates the params string, encode them using URLEncoder 
       Iterator<String> paramIterator = params.keySet().iterator(); 
       while (paramIterator.hasNext()) { 
        String key = paramIterator.next(); 
        String value = params.get(key); 
        requestParams.append(URLEncoder.encode(key, "UTF-8")); 
        requestParams.append("=").append(
          URLEncoder.encode(value, "UTF-8")); 
        requestParams.append("&"); 
       } 

       // sends POST data 
       OutputStreamWriter writer = new OutputStreamWriter(
         httpConn.getOutputStream()); 
       writer.write(requestParams.toString()); 
       writer.flush(); 
      } 

      return httpConn; 
     } 

     /** 
     * Returns only one line from the server's response. This method should be 
     * used if the server returns only a single line of String. 
     * 
     * @return a String of the server's response 
     * @throws IOException 
     *    thrown if any I/O error occurred 
     */ 
     public static String readSingleLineRespone() throws IOException { 
      InputStream inputStream = null; 
      if (httpConn != null) { 
       inputStream = httpConn.getInputStream(); 
      } else { 
       throw new IOException("Connection is not established."); 
      } 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        inputStream)); 

      String response = reader.readLine(); 
      reader.close(); 

      return response; 
     } 

     /** 
     * Returns an array of lines from the server's response. This method should 
     * be used if the server returns multiple lines of String. 
     * 
     * @return an array of Strings of the server's response 
     * @throws IOException 
     *    thrown if any I/O error occurred 
     */ 
     public static String[] readMultipleLinesRespone() throws IOException { 
      InputStream inputStream = null; 
      if (httpConn != null) { 
       inputStream = httpConn.getInputStream(); 
      } else { 
       throw new IOException("Connection is not established."); 
      } 

      BufferedReader reader = new BufferedReader(new InputStreamReader(
        inputStream)); 
      List<String> response = new ArrayList<String>(); 

      String line = ""; 
      while ((line = reader.readLine()) != null) { 
       response.add(line); 
      } 
      reader.close(); 

      return (String[]) response.toArray(new String[0]); 
     } 

     /** 
     * Closes the connection if opened 
     */ 
     public static void disconnect() { 
      if (httpConn != null) { 
       httpConn.disconnect(); 
      } 
     } 
    } 

^h ERE是HttpUtilityTester.java:

package com.example.mythirdapp; 

import java.io.IOException; 
import java.util.HashMap; 
import java.util.Map; 

public class HttpUtilityTester {public static void main(String[] args) { 
    // test sending GET request 
    String requestURL = "http://www.google.com"; 
    try { 
     HttpUtility.sendGetRequest(requestURL); 
     String[] response = HttpUtility.readMultipleLinesRespone(); 
     for (String line : response) { 
      System.out.println(line); 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
    HttpUtility.disconnect(); 


    System.out.println("====================================="); 

    // test sending POST request 
    Map<String, String> params = new HashMap<String, String>(); 
    requestURL = "https://accounts.google.com/ServiceLoginAuth"; 
    params.put("Email", "your_email"); 
    params.put("Passwd", "your_password"); 

    try { 
     HttpUtility.sendPostRequest(requestURL, params); 
     String[] response = HttpUtility.readMultipleLinesRespone(); 
     for (String line : response) { 
      System.out.println(line); 
     } 
    } catch (IOException ex) { 
     ex.printStackTrace(); 
    } 
    HttpUtility.disconnect(); 
} 
} 

我试图添加HttpUtilityTester.java的代码,我Mainactivity.java这样的:

...public class MainActivity extends Activity { 
public void sendMessage1(View v){ 


     // test sending POST request 
     Map<String, String> params = new HashMap<String, String>(); 
     requestURL = "https://accounts.google.com/ServiceLoginAuth"; 
     params.put("Email", "your_email"); 
     params.put("Passwd", "your_password"); 

     try { 
      HttpUtility.sendPostRequest(requestURL, params); 
      String[] response = HttpUtility.readMultipleLinesRespone(); 
      for (String line : response) { 
       System.out.println(line); 
      } 
     } catch (IOException ex) { 
      ex.printStackTrace(); 
     } 
     HttpUtility.disconnect(); 
    }... 

但logcat的赛斯:“无法执行活动的方法“

回答

1

当您单击该按钮时,将会调用以下内容,因此在适用的情况下将其放入代码中。

public void sendMessage1(View v){ 
} 
+0

非常感谢你马特。 –