当前位置: 首页 > 知识库问答 >
问题:

如何在asynctask中创建方法

冯新知
2023-03-14

请指导我如何将所有这些转换为asynctask方法。我必须在asynctask中生成这段代码,因为在uithread中调用它时,它给出了一个null值。请告诉我如何实现这一点的正确方法。我看到了很多关于stackoverflow的问题,但我无法做到这一点。

我看到了以下问题:

如何修复android.os.NetworkOnMainThreadException?

android.os.NetworkOnMainThreadException与android 4.2

主线程上的网络异常

Android操作系统。NetworkOnMainThreadException

如何修复android.os.NetworkOnMainThreadException?

我的班级是:

public class JSONParser {
static InputStream is = null;
static JSONObject jObj = null;
static String json = "";
public JSONParser() {
}
public JSONObject makeHttpRequest(String url, String method, List<NameValuePair> params)
{  try
{
if(method == "POST")
{
    DefaultHttpClient httpClient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost(url);
    httpPost.setEntity(new UrlEncodedFormEntity(params));
    HttpResponse httpResponse = httpClient.execute(httpPost);
    HttpEntity httpEntity = httpResponse.getEntity();
    is = httpEntity.getContent();
}
else if(method == "GET"){
 DefaultHttpClient httpClient = new DefaultHttpClient();
    String paramString = URLEncodedUtils.format(params, "utf-8"); url += "?" + paramString;
    HttpGet httpGet = new HttpGet(url);
    HttpResponse httpResponse = httpClient.execute(httpGet);
    HttpEntity httpEntity = httpResponse.getEntity();
    is = httpEntity.getContent();
}
}
catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
catch (ClientProtocolException e) {
e.printStackTrace();
}
catch (IOException e) {
e.printStackTrace();
}
try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8);
    StringBuilder sb = new StringBuilder();
    String line = null;
    while ((line = reader.readLine()) != null)
    { sb.append(line + "\n");
    }
    is.close(); json = sb.toString();
}
catch (Exception e) {
    Log.e("Buffer Error", "Error converting result " + e.toString()); }
     try {
         jObj = new JSONObject(json);
     }
     catch (JSONException e) {
         Log.e("JSON Parser", "Error parsing data " + e.toString());
     }
return jObj;
}
}

共有1个答案

澹台玉石
2023-03-14

@ebad,您已经回答了自己的问题,请使用如下异步任务:

class GetJsonTask extends AsyncTask<String, String, JSONObject>
{
    List<NameValuePair> params;

    public CreateNewProduct(List<NameValuePair> params){
      this.params = params;
    }

    protected JSONObject doInBackground(String... urls)
    {
        JSONParser jsonParser = new JSONParser();
        JSONObject json = jsonParser.makeHttpRequest(url[0],"POST", this.params);

        return json;
    }

    protected void onPostExecute(JSONObject result)
    {
      //parse the result here  
    }
}

用法:

GetJsonTask jsonTask = new GetJsonTask(params);
jsonTask.execute("http://example.com");
 类似资料:
  • 问题内容: 我有以下方法: 我想使其成为一种通用方法,这样我就不必为每个新的自定义类型编写新的代码。我可以这样做,这需要在调用update()之前实例化该对象: 出于好奇,我想知道是否有一种方法可以使用Java泛型来做到这一点: 有没有办法用Java做到这一点? 问题答案: 请注意,在这种情况下将可以修复。任一(其本身包括可从获得)或本身已得到通过。

  • 我正在尝试创建一个testNG dataprovider方法,该方法将从我的项目中返回一个自定义类的对象数组。这个数组是一维数组,我不想从这个dataprovider方法返回二维数组。请建议,Dataprovider是否应始终返回2D数组(不小于或大于2D)。如果是,则我需要以下方面的帮助: 返回新对象[][]{{user[0]},{user[1]},{user[2]},{user[3]}} 我们

  • 我是Android 我试图创建一个应用程序,它使用ssh连接连接到Beaglebone Black,然后通过发出来自Android设备的命令来控制连接到BBB的一些外围设备。我打开(成功)一个ssh会话在AsyncWork中,而用户看到一个闪屏,如果连接成功,用户将得到一个确认,然后将能够发送预定义的命令通过点击一些可用的按钮。 接下来我要做的是让会话保持打开状态,然后每次我希望发出命令并等待BB

  • 问题内容: 例如,在Java中,我可能有一个类,并且有一个名为的静态方法,因此我可以执行以下操作: 我该如何在目标C中做类似的事情? 非常感谢 问题答案: 在Objective-C中,您将此称为“类方法”,请参见此处: 该 + 是最重要的事情; 您可以这样调用方法:

  • 问题内容: 我的任务是编写一个询问用户输入的程序,该方法将返回输入是否形成幻方。无论我输入到控制台什么,程序都会返回我输入了一个魔术方块。我想念什么? 幻方定义:如果行,列和对角线的总和相同,则二维数组就是幻方。 问题答案: 您没有保存输入的内容,因此将0x0 square传递给。 许多方面的实现是错误的。 条件应该是。 您只需要在计算完成后检查即可。 您必须先进行初始化,然后再计算它们。 您应该

  • 问题内容: 如何在method内部创建方法?当我创建其显示错误时: 令牌无效@上的语法错误 如果不能在方法内部创建方法,那么请告诉我如何在方法外部创建方法,并从方法中传递方法。 问题答案: *请注意,应使用没有不等号的实际类型(例如“ int”和“ short”)替换此类标记。