【问题标题】:Android Restful API retrofit fetching data on Create method but not displayAndroid Restful API 改造在 Create 方法上获取数据但不显示
【发布时间】:2018-07-18 16:00:44
【问题描述】:

这是完整的代码 (在第一个活动中,两个值来自微调器并通过发送到第二个活动的函数数据)

第一个活动:

public class FindBloodActivity extends AppCompatActivity {
    String API = "http://abdolqadir-001-site1.ctempurl.com/Account.svc";
    TextView t;
    Spinner spbgid;
    Spinner spcityid;
    ProgressBar pro;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_find_blood);
        t = (TextView) findViewById(R.id.tv);
        pro=(ProgressBar) findViewById(R.id.progressBar2);
        pro.setVisibility(View.INVISIBLE);
        spbgid=(Spinner) findViewById(R.id.spinnerBG);
        spcityid=(Spinner) findViewById(R.id.spinnerLocation);
        t.setVisibility(View.INVISIBLE);
    }
    public void SearchOn(View v)  {
        String BGId = Integer.toString(spbgid.getSelectedItemPosition()+1);
        String CityId =Integer.toString(spcityid.getSelectedItemPosition()+1);
        Intent intent=new Intent(getApplicationContext(),SearchResult2.class);
        intent.putExtra("bid",BGId);
        intent.putExtra("cid",CityId);
        startActivity(intent);
    }
}

第二个活动:在第二个活动中 tt.append(string.toString());工作正常,但是当我添加下面的代码时,如果我尝试调试而不是应用程序终止,则应用程序终止。

public class SearchResult2 extends AppCompatActivity {
    String API = "http://abdolqadir-001-site1.ctempurl.com/Account.svc";
    Spinner sp;
    TextView t;
    TextView tt;
    public int totalUsersCount = 0;
    String[] allUserNames;
    String[] allUserContacts;
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_result2);
        tt=(TextView)findViewById(R.id.tvTest);
        tt.setVisibility(View.INVISIBLE);
        Bundle extras = getIntent().getExtras();
        String BGId = extras.getString("bid");
        String CityId = extras.getString("cid");
        tt.setText("");
        final RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(API).build();
        final gitapi git = restAdapter.create(gitapi.class);
        git.SearchUsers(BGId, CityId, new Callback<String>() {
            @Override
            public void success(String string, Response response) {
                    tt.append(string.toString());
            }
            @Override
            public void failure(RetrofitError retrofitError) {
                tt.setText("No User Found");
            }
        });
            String bigArray = tt.getText().toString();
            listView = (ListView)findViewById(R.id.lvUsers);
            bigArray = bigArray.substring(0, bigArray.length() - 1);
            totalUsersCount = bigArray.split(",").length;
            listView.clearTextFilter();
            if (totalUsersCount > 0)
            {
                String[] allUsers = new String[totalUsersCount];
                allUsers = bigArray.split(",");
                allUserNames = new String[totalUsersCount];
                allUserContacts = new String[totalUsersCount];
                String[] temp = new String[3];
                for (int i = 0; i < totalUsersCount; i++) {
                    temp = allUsers[i].split("-");
                    allUserNames[i] = temp[1];
                    allUserContacts[i] = temp[2];
                }
                ArrayAdapter<String> itemsAdapter =
                        new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, allUserNames);
                listView.setAdapter(itemsAdapter);
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        SendSMS(position);
                    }
                });
            }
    }
}

这是日志

02-08 12:40:51.433 9970-10008/com.example.abdulqadir.bd I/OpenGLRenderer: Initialized EGL, version 1.4
02-08 12:40:51.457 9970-10008/com.example.abdulqadir.bd W/linker: /vendor/lib64/libhwuibp.so: unused DT entry: type 0xf arg 0xe3a
02-08 12:40:51.458 9970-9970/com.example.abdulqadir.bd W/art: Before Android 4.1, method int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) would have incorrectly overridden the package-private method in android.widget.ListView
02-08 12:40:51.548 9970-10008/com.example.abdulqadir.bd E/hwaps: APS: SSR : The platform cannot support SSR !: 0x0,0x0,8

下面的代码对我来说很好,但是当我把它改成上面的而不是出错时,这里是代码,请检查

public class FindBloodActivity extends AppCompatActivity {
    String API = "http://abdolqadir-001-site1.ctempurl.com/Account.svc";
    TextView t;
    Spinner spbgid;
    Spinner spcityid;
    ProgressBar pro;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_find_blood);
        t = (TextView) findViewById(R.id.tv);
        pro=(ProgressBar) findViewById(R.id.progressBar2);
        pro.setVisibility(View.INVISIBLE);
        spbgid=(Spinner) findViewById(R.id.spinnerBG);
        spcityid=(Spinner) findViewById(R.id.spinnerLocation);
        t.setVisibility(View.INVISIBLE);
    }
    public void SearchOn(View v)  {
        String BGId = Integer.toString(spbgid.getSelectedItemPosition()+1);
        String CityId =Integer.toString(spcityid.getSelectedItemPosition()+1);
        SearchAllUsers(BGId.toString(), CityId.toString());
    }
    public void SearchAllUsers(String BGId,String CityId) {
        t.setText("");
        final RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(API).build();
        final gitapi git= restAdapter.create(gitapi.class);
        git.SearchUsers(BGId,CityId,new Callback<String>() {
            @Override
            public void success(String string, Response response) {
                t.append(string.toString());
            }
            @Override
            public void failure(RetrofitError retrofitError) {
                t.setText("No User Found");
            }
        });
    }
    public void Search(View v){
        try {
            Thread.sleep(9000);
            Intent intent=new Intent(getApplicationContext(),SearchResult.class);
            intent.putExtra("users",t.getText().toString());
            startActivity(intent);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

第二个活动:

public class SearchResult2 extends AppCompatActivity {
    String API = "http://abdolqadir-001-site1.ctempurl.com/Account.svc";
    Spinner sp;
    TextView t;
    TextView tt;
    public int totalUsersCount = 0;
    String[] allUserNames;
    String[] allUserContacts;
    ListView listView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_search_result2);
        tt=(TextView)findViewById(R.id.tvTest);
        tt.setVisibility(View.INVISIBLE);
        Bundle extras = getIntent().getExtras();
        String BGId = extras.getString("bid");
        String CityId = extras.getString("cid");
        tt.setText("");
        final RestAdapter restAdapter = new RestAdapter.Builder()
                .setEndpoint(API).build();
        final gitapi git = restAdapter.create(gitapi.class);
        git.SearchUsers(BGId, CityId, new Callback<String>() {
            @Override
            public void success(String string, Response response) {
                    tt.append(string.toString());
            }
            @Override
            public void failure(RetrofitError retrofitError) {
                tt.setText("No User Found");
            }
        });
            String bigArray = tt.getText().toString();
            listView = (ListView)findViewById(R.id.lvUsers);
            bigArray = bigArray.substring(0, bigArray.length() - 1);
            totalUsersCount = bigArray.split(",").length;
            listView.clearTextFilter();
            if (totalUsersCount > 0)
            {
                String[] allUsers = new String[totalUsersCount];
                allUsers = bigArray.split(",");
                allUserNames = new String[totalUsersCount];
                allUserContacts = new String[totalUsersCount];
                String[] temp = new String[3];
                for (int i = 0; i < totalUsersCount; i++) {
                    temp = allUsers[i].split("-");
                    allUserNames[i] = temp[1];
                    allUserContacts[i] = temp[2];
                }
                ArrayAdapter<String> itemsAdapter =
                        new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, allUserNames);
                listView.setAdapter(itemsAdapter);
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        SendSMS(position);
                    }
                });
            }
    }

【问题讨论】:

  • 添加崩溃日志?
  • 你能添加RestAdapter的截图吗
  • 在此处粘贴错误日志
  • 能否将上面提到的崩溃日志添加到其他cmets中?
  • 02-08 12:09:47.704 10778-10814/com.example.abdulqadir.bd W/链接器:/vendor/lib64/libhwuibp.so:未使用的 DT 条目:类型 0xf arg 0xe3a 02- 08 12:09:47.728 10778-10778/com.example.abdulqadir.bd W/art:在 Android 4.1 之前,方法 int android.support.v7.widget.ListViewCompat.lookForSelectablePosition(int, boolean) 会错误地覆盖包 - android.widget.ListView 中的私有方法 02-08 12:09:47.797 10778-10814/com.example.abdulqadir.bd E/hwaps: APS: SSR : 该平台不支持 SSR !: 0x0,0x0,8

标签: java android web-services android-studio retrofit


【解决方案1】:

以下是您可以尝试的方法,请在onCreate() 中使用此代码

 listView = (ListView)findViewById(R.id.lvUsers);
ArrayAdapter<String> itemsAdapter =
                    new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, allUserNames);
            listView.setAdapter(itemsAdapter);
            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    SendSMS(position);
                }
            });

以及在将其替换为 if 条件内部之前您使用上述代码的位置

itemsAdapter.notifyDatasetChanged();

希望对你有帮助

【讨论】:

    【解决方案2】:

    为什么不从 onCreate() 方法调用 REST? 还有 component.setVisibility(View.INVISIBLE);在整体布局中保留空间。您可以改用“GONE”,看看这是否有帮助或伤害。 并尝试将您的 URL 和其他组件放在不同的方法或类中。这可以帮助很多人保持代码干净且易于发现错误。

    说了这么多,在使用断点并在调试模式下运行之后,哪一行是错误?

    【讨论】:

      猜你喜欢
      • 2021-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-08
      • 2021-08-28
      • 2021-08-05
      • 2013-09-24
      相关资源
      最近更新 更多