Java 从类返回JSON对象数组

Java 从类返回JSON对象数组,java,android,android-studio,mobile-application,Java,Android,Android Studio,Mobile Application,我最近开始尝试教自己如何编写Android应用程序,我在理解/实现一个方法来传递我调用的类的结果数组时遇到了一点困难 由于我不知道如何完美地布局这个例子,请容忍我 我有我的main活动,它调用类AsyncTaskParseJson(从在线示例中可以部分地看出)。现在,我的MainActivity可以调用该类,并返回一个显示true/false的字符串。我希望将数组或转换为字符串的数组返回到MainActivity进行进一步处理 代码: 包jesse.jones.test; 导入android.o

我最近开始尝试教自己如何编写Android应用程序,我在理解/实现一个方法来传递我调用的类的结果数组时遇到了一点困难

由于我不知道如何完美地布局这个例子,请容忍我

我有我的
main活动
,它调用类
AsyncTaskParseJson
(从在线示例中可以部分地看出)。现在,我的MainActivity可以调用该类,并返回一个显示true/false的字符串。我希望将数组或转换为字符串的数组返回到MainActivity进行进一步处理

代码:

包jesse.jones.test;
导入android.os.AsyncTask;
导入android.util.Log;
导入org.json.JSONArray;
导入org.json.JSONException;
导入org.json.JSONObject;
导入java.util.ArrayList;
/**
*由阴影于2014年9月16日创建。
*/
//您可以将这个类作为另一个java文件,这样它将与您的主要活动分离。
公共类AsyncTaskParseJson扩展AsyncTask{
final String TAG=“AsyncTaskParseJson.java”;
字符串userEmail;
字符串用户密码;
弦波作用;
字符串数组;
//在此处设置json字符串url
字符串yourJsonStringUrl=;
//联系JSONArray
JSONArray dataJsonArr=null;
主要活动能力;
公共AsyncTaskParseJson(MainActivity活动){
活动性=活动性;
}
public void setCredentials(字符串inUserEmail、字符串inUserPassword){
userEmail=inUserEmail;
userPassword=inUserPassword;
}
public void setAction(字符串actionToTake){
doAction=采取行动;
}
受保护的字符串urlBuilderv1(字符串actionToTake、字符串inUserEmail、字符串inUserPassword){
字符串URL字符串=
如果(actionToTake==“测试”){
URL字符串=
}
如果(actionToTake==“登录”){
URL字符串=
}
如果(actionToTake==“getReports”){
URL字符串=
}
返回URL字符串;
}
公共字符串getReportArray(){
返回报表数组;
}
@凌驾
受保护的void onPreExecute(){}
@凌驾
受保护的字符串doInBackground(字符串…arg0){
字符串jsonReturnedResult=“NORETURN”;
字符串jsonReturnedMessage=null;
字符串jsonReturnedReports=null;
字符串结果=null;
试一试{
//实例化我们的json解析器
JasonParser jParser=新的JasonParser();
yourJsonStringUrl=urlBuilderv1(doAction、userEmail、userPassword);
//从url获取json字符串
JSONObject json=jParser.getJSONFromUrl(yourJsonStringUrl);
jsonReturnedResult=json.get(“结果”).toString();
//^^我想把这个JSONArray带回到主要活动
//^^而不是从中拔出一根绳子。
结果=jsonReturnedResult;
}捕获(JSONException e){
e、 printStackTrace();
}
返回结果;
}
@凌驾
受保护的void onPostExecute(字符串strFromDoInBg){
mActivity.onGetResults(strFromDoInBg);
}
}

在调用任务引用的execute()方法后,对其调用get()方法。这将基本上把它变成一个同步任务,但它会得到字符串结果。AsyncTask返回的类型是在“extends AsyncTask”中指定的最后一个“字符串”。将其更改为您想要返回的任何类型。

为了澄清,通过将最后一个“字符串”更改为“ArrayList”,我将能够返回一个数组:P我可以返回一个字符串,没有问题。但这只是我需要的完整数据的一小部分。最后一个字符串只是返回类型。您可以使用String[]从doInBackground方法返回字符串数组。我最终为返回编写了一个接口,使用该接口,我可以根据需要返回任意多的字符串、整数和数组。作为这个安卓平台的新手,我没有意识到用“java”比用“安卓”更容易找到帮助。我感谢你的意见!
package jesse.jones.test;

import android.os.AsyncTask;
import android.util.Log;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.util.ArrayList;

/**
 * Created by Shadow on 9/16/14.
 */

// you can make this class as another java file so it will be separated from your main activity.
public class AsyncTaskParseJson extends AsyncTask<String, String, String> {

    final String TAG = "AsyncTaskParseJson.java";
    String userEmail;
    String userPassword;
    String doAction;
    String reportArray;

    // set your json string url here
    String yourJsonStringUrl = <-url removed->;

    // contacts JSONArray
    JSONArray dataJsonArr = null;

    MainActivity mActivity;

    public AsyncTaskParseJson(MainActivity activity){
        mActivity = activity;


    }

    public void setCredentials(String inUserEmail,String inUserPassword){
        userEmail = inUserEmail;
        userPassword= inUserPassword;
    }

    public void setAction(String actionToTake){
        doAction = actionToTake;
    }

    protected String urlBuilderv1(String actionToTake,String inUserEmail, String inUserPassword){
        String urlString = <-url removed->

        if (actionToTake == "test"){
            urlString = <-url removed->
        }
        if (actionToTake == "login"){
            urlString = <-url removed->
        }

        if (actionToTake == "getReports"){
            urlString = <-url removed->
        }

        return urlString;
    }

    public String getReportArray(){

        return reportArray;
    }

    @Override
    protected void onPreExecute() {}

    @Override
    protected String doInBackground(String... arg0) {

        String jsonReturnedResult = "NORETURN";
        String jsonReturnedMessage = null;
        String jsonReturnedReports = null;
        String result = null;

        try {

            // instantiate our json parser
            JasonParser jParser = new JasonParser();

            yourJsonStringUrl = urlBuilderv1(doAction,userEmail,userPassword);

            // get json string from url
            JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl);


            jsonReturnedResult = json.get("result").toString();
            //^^ I would like to take this JSONArray back to main activity
            //^^ instead of pulling a single string from it.
            result = jsonReturnedResult;


        } catch (JSONException e) {
            e.printStackTrace();
        }

        return result;
    }
    @Override
    protected void onPostExecute(String strFromDoInBg) {

        mActivity.onGetResults(strFromDoInBg);


    }

}