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

接收JSON java。无法将lang.string转换为jsonarray

衡高寒
2023-03-14

我为一个网站做了一个应用程序。它有一个JSON API。im试图获取结果的URL是:http://api.bayfiles.net/v1/account/login/

我得到了错误:java。使用logcat记录错误时,无法将lang.string转换为jsonarray。

我的主要活动是:

public class MainActivity extends SherlockActivity {

    EditText un,pw;
    TextView error;
    Button ok;
    private ProgressDialog mDialog;

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

        un = (EditText)findViewById(R.id.user);
        pw = (EditText)findViewById(R.id.psw);
        ok = (Button)findViewById(R.id.button1);
        error = (TextView)findViewById(R.id.textView1);

        ok.setOnClickListener(new View.OnClickListener() {

             @Override
             public void onClick(View v) {
                 // TODO Auto-generated method stub
                 //error.setText("Clicked");
                 //Intent startNewActivityOpen = new Intent(LoginActivity.this, FilesActivity.class);
                 //startActivityForResult(startNewActivityOpen, 0);

                 JsonAsync asyncTask = new JsonAsync();
                // Using an anonymous interface to listen for objects when task
                // completes.
                asyncTask.setJsonListener(new JsonListener() {
                    public void onObjectReturn(JSONObject object) {
                        handleJsonObject(object);
                    }
                });
                // Show progress loader while accessing network, and start async task.
                //mDialog = ProgressDialog.show(this, getSupportActionBar().getTitle(),
                    //  getString(R.string.loading), true);
                asyncTask.execute("http://api.bayfiles.net/v1/account/login/spxc/mess2005");



             }
        });     
    }

    private void handleJsonObject(JSONObject object) {
        ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>();

        try {

            JSONArray shows = object.getJSONArray("error");

            for (int i = 0; i < shows.length(); i++) { 
                HashMap<String, String> map = new HashMap<String, String>(); 
                JSONObject e = shows.getJSONObject(i); 

                //map.put("video_id", String.valueOf(i));
                map.put("session", "" + e.getString("session"));
                mylist.add(map);
            }
        } catch (JSONException e) {
            Log.e("log_tag", "Error parsing data: " + e.toString());
        }

        error.setText("session");

                /*
                //Intent myIntent = new Intent(ListMoviesController.this,
                    //  TestVideoController.class);
                myIntent.putExtra("video_title", o.get("video_title"));
                myIntent.putExtra("video_channel", o.get("video_channel"));
                myIntent.putExtra("video_location", o.get("video_location"));
                startActivity(myIntent); */
            }{

        if (mDialog != null && mDialog.isShowing()) {
            mDialog.dismiss();
        }
    }

}

这是我的适配器:JSONfunctions。JAVA

public class JSONfunctions {

    public static JSONObject getJSONfromURL(String url){
        InputStream is = null;
        String result = "";
        JSONObject jArray = null;

        //http post
        try{
            HttpClient httpclient = new DefaultHttpClient();
            HttpPost httppost = new HttpPost(url);

            try {
                // Add your data
                /*List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2);
                nameValuePairs.add(new BasicNameValuePair("key", "stianxxs"));
                nameValuePairs.add(new BasicNameValuePair("secret", "mhfgpammv9f94ddayh8GSweji"));
                httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); */

                // Execute HTTP Post Request
                HttpResponse response = httpclient.execute(httppost);
                //HttpResponse response = httpclient.execute(httppost);
                HttpEntity httpEntity = response.getEntity();
                is = httpEntity.getContent();

            } catch (ClientProtocolException e) {
                // TODO Auto-generated catch block
            } catch (IOException e) {
                // TODO Auto-generated catch block
            }

        }catch(Exception e){
                Log.e("log_tag", "Error in http connection "+e.toString());
        }

      //convert response to string
        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();
                result=sb.toString();
        }catch(Exception e){
                Log.e("log_tag", "Error converting result "+e.toString());
        }

        try{

            jArray = new JSONObject(result);            
        }catch(JSONException e){
                Log.e("log_tag", "Error parsing data "+e.toString());
        }

        return jArray;
    }
}

为什么我得到这个错误?当在url中使用正确的用户名和密码时,你会得到:{"错误":"","会话":"随机数字"}

正如你所看到的,我试着去拿这个号码。非常感谢您的帮助!


共有1个答案

史钊
2023-03-14

你会得到这个错误,因为在

JSONArray shows = object.getJSONArray("error");

您正在尝试为key错误获取值,并将其视为数组,而不是-它是一个空字符串。因此,您需要将其作为字符串获取:

String error = object.getString("error");

同样,如果您需要获得“会话”,您可以使用

String session = object.getString("session");

注意,这是假设您的JSONObject对象实际上包含问题中字符串表示的对象。

 类似资料:
  • 我正在开发一个android应用程序,我正在尝试使用Volley库。我无法解决的问题是关于JSON的。我检查了我的php文件、结果和Java代码,但仍然得到相同的错误。 有趣的是,截击日志不显示错误消息,但日志显示错误消息。 和 这是我的PHP代码: 结果如下: 和我的Java代码: 我也听说了GSON。这是解决办法吗?有人能帮帮我吗?提前感谢!!

  • 我正在抛出一个JSON异常,我不知道为什么会抛出它。我已经看了几乎所有和我一样的问题,但我认为我的不同。因此,我从一个网页获得一个JSONArray,它发送的JSON是有效的(我用验证器检查了它)。在JSONArray上执行getJSONObject时引发异常。 这正是它所说的(个人信息被标出): 这是我的Java代码: 错误发生在我去的行: 任何帮助都非常感谢。

  • 我不知道为什么,但是当我试图从JSON获取数据时,我得到了这个错误: JAVA无法在Jsonarray中转换lang.String 这是我的代码, 主要活动: JSON:

  • 我将客户数据对象存储为共享首选项(Android)中的JSON字符串,并尝试检索转换回客户对象的字符串并用于验证。从对象到JSON字符串的转换非常好,并且存储在首选项中(作为键值(字符串)对)。 当我尝试使用-我总是得到相同的错误值...类型java.lang.字符串不能转换为JSONObject。 我希望一双不同的眼睛能捕捉到我不能捕捉到的东西。带有数据的错误消息(屏蔽): Value 类型为j

  • 我在使用Jaspersoft Studio和Oracle数据库时出错。一旦有一些数据,以下行 引发以下错误: net.sf.jasperreports.engine.java.lang.java.lang.字符串不能转换为java.lang.布尔 我不明白,为什么Jasper Studio会将其转换为布尔值,因为它被定义为字符串: SQL对我来说也很好: 在视图/表格中:

  • 在这里,我试图将数据发送到我的web服务器,并使用解析json并将数据插入mysql数据库。我得到一个错误,表示值stdClass为