- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在尝试将我在 API10 中创建的应用程序的 MainActivity 代码转换为 API 16。根据我所阅读的内容,我必须开始使用 ASyncTask 来访问 URI 并在我的应用程序上显示信息。我设法在 2.3 中做到了这一点,但在将其转换为 JSON 后,我现在面临一些障碍。
从本质上讲,该应用程序所做的是,它需要一个 list 代码,即 WAMF33000,然后单击一个按钮,Spinner 就会填充该 list 中包含的作业。由于我对 ASyncTask 的概念相当陌生,因此我想了解我的代码如何应用于 ASyncTask 背后的理论。
根据我的代码,我有一些问题:-i) 我在 ASyncTask 中的哪个代码是传递的参数?ii) 我的 AsyncTask 中的进度值是多少?iii) 最后,我的返回值是 ManifestItems 的 ArrayList 吗?
从 2.3 版本开始,我调用了 JSON 两次 - 一次是在 list 中加载 cargo ,第二次是加载在微调器中选择的 cargo 的详细信息。
以下是我的代码:
package com.signonglass;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.json.*;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.telephony.TelephonyManager;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity
{
private final static String POD_URI = "http://192.168.0.105:8092/PodCore.svc";
private EditText evManifestCode;
private Spinner list_job;
private Button btnSubmit;
private String jobName;
private Button btnCons;
ArrayList<ManifestItemObj> jobList = new ArrayList<ManifestItemObj>();
ArrayList<ConsignmentItems> conItemList = new ArrayList<ConsignmentItems>();
Consignments retConsignment;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
evManifestCode = (EditText)findViewById(R.id.manifest);
btnSubmit = (Button)findViewById(R.id.btnSearchManifest);
list_job = (Spinner)findViewById(R.id.jobSpinner);
//tvView = (TextView)findViewById(R.id.deviceIdt);
//TelephonyManager telephonyManager = (TelephonyManager) this.getSystemService(Context.TELEPHONY_SERVICE);
//String IMEI_Number = telephonyManager.getDeviceId();
//tvView.setText("IMEI Number: " + IMEI_Number);
}
public class MyAsyncTask extends AsyncTask<String, Void, ArrayList<ManifestItemObj>>
{
protected void onPreExecute()
{
}
protected void onPostExecute(ArrayList<ManifestItemObj> jobList)
{
}
@Override
protected ArrayList<ManifestItemObj> doInBackground(String... params)
{
//http get request
HttpGet request = new HttpGet(POD_URI + "/getJobs/" + evManifestCode.getText().toString());
//set the hedear to get the data in JSON format
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
DefaultHttpClient client = new DefaultHttpClient();
String theString = new String("");
try
{
//get the response
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
builder.append(line);
}
is.close();
theString = builder.toString();
JSONObject jobsJSON = new JSONObject(theString);
JSONArray jobs = jobsJSON.getJSONArray("getJobsResult");
for(int i = 1; i < jobs.length(); i++)
{
JSONObject mit = jobs.getJSONObject(i);
ManifestItemObj mi = new ManifestItemObj();
mi.ManifestItemID = mit.getInt("ManifestItemID");
mi.JobType = mit.getString("JobType");
mi.FKID = mit.getInt("FKID");
jobList.add(mi);
}
}
catch (Exception e)
{
e.printStackTrace();
}
return jobList;
}
}
/*private void showToast(String msg)
{
// TODO Auto-generated method stub
Toast.makeText(this, "Toast: " + msg, Toast.LENGTH_LONG).show();
}*/
public void onViewConsignment(View view)
{
ShowItemsOfManifest(retConsignment);
}
public Consignments getConsignmentManifest(String consignment)
{
Consignments con = new Consignments();
try
{
DefaultHttpClient client = new DefaultHttpClient();
String theString = new String("");
//http get request
HttpGet request = new HttpGet(POD_URI + "/getJobDetails/" + consignment);
//set the hedear to get the data in JSON format
request.setHeader("Accept", "application/json");
request.setHeader("Content-type", "application/json");
//get the response
HttpResponse response = client.execute(request);
HttpEntity entity = response.getEntity();
InputStream is = entity.getContent();
BufferedReader reader = new BufferedReader(new InputStreamReader(is));
StringBuilder builder = new StringBuilder();
String line;
while ((line = reader.readLine()) != null)
{
builder.append(line);
}
is.close();
theString = builder.toString();
JSONObject conJSON = new JSONObject(theString);
JSONArray cons = conJSON.getJSONArray("getJobDetailsResult");
for(int i = 0; i < cons.length(); i++)
{
JSONObject cObj = cons.getJSONObject(i);
con.ConsignmentID = cObj.getInt("ConsignmentID");
con.ConsignmentCreationDate = cObj.getString("ConsignmentCreationDate");
con.ConsignmentCustRef = cObj.getString("ConsignmentCustRef");
con.OrderNo = cObj.getString("OrderNo");
con.ConsignmentActive = cObj.getBoolean("ConsignmentActive");
con.JobType = cObj.getString("JobType");
//Client object
JSONObject clObj = cObj.getJSONObject("Client");
Clients cl = new Clients();
cl.ClientId = clObj.getInt("ClientID");
cl.ClientName = clObj.getString("ClientName");
con.Clients = cl;
//ShipTo object
JSONObject stObj = cObj.getJSONObject("ShipTo");
ShipTo sto = new ShipTo();
sto.ShipToId = stObj.getInt("ShipToId");
sto.ShipToName = stObj.getString("ShipToName");
sto.ShipToAddress1 = stObj.getString("ShipToAddress1");
sto.ShipToAddress2 = stObj.getString("ShipToAddress2");
sto.ShipToCity = stObj.getString("ShipToCity");
sto.ShipToPostcode = stObj.getString("ShipToPCode");
sto.ShipToState = stObj.getString("ShipToState");
con.ShipTo = sto;
//FreightZone object
JSONObject fzObj = cObj.getJSONObject("FreightZone");
FreightZones fz = new FreightZones();
fz.FreightZoneID = fzObj.getInt("FreightZoneId");
fz.FreightZone = fzObj.getString("FreightZone");
con.FreightZone = fz;
JSONArray conItems = cObj.getJSONArray("ConsignmentItems");
for(int m = 0; m < conItems.length(); m++)
{
JSONObject cit = conItems.getJSONObject(m);
ConsignmentItems ci = new ConsignmentItems();
ci.ConsignmentItemID = cit.getInt("ConsignmentItemsID");
ci.Quantity = cit.getInt("QTY");
//get Product from ConsignmentItems
JSONObject pro = cit.getJSONObject("Products");
Products prod = new Products();
prod.ProductId = pro.getInt("ProductID");
prod.ProductModel = pro.getString("ProductModel");
prod.ItemsPerCarton = pro.getInt("PerCarton");
prod.ProductDescription = pro.getString("Description");
prod.Height = (float) pro.getDouble("Height");
prod.Length = (float) pro.getDouble("Length");
prod.Width = (float) pro.getDouble("Width");
prod.Cubic = (float) pro.getDouble("Cubic");
ci.Product = prod;
conItemList.add(ci);
con.ConsignmentItems = conItemList;
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
return con;
}
public void ShowItemsOfManifest(Consignments consignments)
{
Bundle bundle = new Bundle();
Intent newIntent = new Intent(this.getApplicationContext(), ConActivity.class);
newIntent.putExtras(bundle);
newIntent.putExtra("Consignment", consignments);
this.startActivity(newIntent);
}
public void onSearchClick(View view)
{
new MyAsyncTask().execute();
ManifestItemAdapter mia = new ManifestItemAdapter(MainActivity.this, android.R.layout.simple_spinner_item, jobList);
list_job.setAdapter(mia);
}
}
我期待通过您对我的代码提出的建设性意见进一步了解 ASyncTask。伙计们,在此先感谢您帮助我改进我的代码和我对 Android 的理解! :)
PS:如果您需要更多代码,请告诉我。我会根据需要更新我的帖子,提供更多信息。干杯!
最佳答案
AsyncTask
背后的要点是允许您在单独的线程上运行后台工作,例如网络内容,这样您就不会占用 UI
,用户仍然可以在下载数据时做事。
Which of my code in the ASyncTask is the parameter that is being passed?
您目前没有将任何params
传递给AsyncTask
new MyAsyncTask().execute(); // you would put params in here if needed such as a URL, String, etc...
What is the progress value in my AsyncTask?
据我所知,你没有。如果您愿意,您可以使用 publishProgress(value)
并将其发送到 onProgressUpdate()
以更新下载的文件、进度时间、剩余时间等内容。 ..
Finally, is my return value the ArrayList of ManifestItems?
您正在返回 jobList
,因此它将被发送到 onPostExecute()
以执行您需要的操作
注意:了解AsyncTask
最重要的事情之一是您不能从doInBackground 更新
因此您必须在其他 UI
()AsyncTask
方法之一中执行此操作或将值传回 UI
函数。此外,AsyncTask
在 2.3 中的工作方式与在 3.0 及更高版本中的不同。它们不再并行运行,而是放入队列中。因此,如果您希望它们在 4.2 中并行运行,您可能需要阅读有关 executeOnExecutor() 的内容。我希望这能回答你的问题
executeOnExecutor()(http://developer.android.com/reference/android/os/AsyncTask.html#executeOnExecutor(java.util.concurrent.Executor,参数...)
我看到的其他一些事情是您需要将 @Override
注释添加到已实现的方法以及 super
调用中。
关于android - 使用 AsyncTask 在 Android 4.2 中使用 JSON 填充 Spinner,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16174065/
所以我有一个微调器,我成功地更改了所选项目的颜色,但我无法更改下拉菜单中项目的颜色 这是我的 spinner_layout.xml 这是我的 样式.xml @style/Spin
我需要做的是,如果选择了微调器 1 中的某个项目,它需要在微调器 01 中显示某个数组例如如果微调器一个选定的项目是红色微调器 01 需要显示 level_array 作为微调器 01 的下拉选项,否
我想在点击微调器外部后关闭 Android 微调器。这可能吗? 最佳答案 我在这方面运气不错,即使它不能完全奏效。 Spinner 适配器的获取 View : public View getView(
我正在使用 eneter 框架来处理我的 android 应用程序中的通信;问题是当我试图填充微调器时,将适配器设置为微调器会导致未定义的异常 这里是代码 public void populateSp
我在 xml 文件中有一个微调器,宽度和高度设置为 wrap_content,我将背景设置为微调器, 文本居中显示,如果我在 dp 或 fill_parent 中设置宽度,则文本显示为左对齐,但当微调
我有一个微调器 onItemSelect 我需要根据第一个选择打开另一个微调器。这是代码......我能够给第一个微调器充气但是在选择一个条目时没有任何反应 Spinner filterSpinner
当我打开 TalkBack 时,在微调器中做出选择后,焦点会立即返回到屏幕顶部(工具栏)。我希望在用户选择后立即将焦点放在微调器上。 我已经尝试将微调器设置为可聚焦: spinner.setFocus
我知道已经有大约一百万个主题,但请听我说完。 标题说明了一切,当我在微调器 1 中选择一个项目时,微调器 2 会获得一个特定的选项列表供您选择(然后将用于显示信息)。它本质上是一本小型通讯录。 *更新
我正在为 Android 构建一个有两个微调器的应用程序。第一个有一系列选择。我有一些代码可以更改第二个微调器的值,但数组在第二个微调器中永远不会改变。我检查过,selectedValue 确实等于所
我有一个 xml 布局文件,其中包含一些小部件,包括一个 Spinner 我想在微调器中显示一个字符串列表,该列表是在运行时作为函数的结果生成的,因此它不能在 arrays.xml 中。 我试过: S
spinner 没有根据另一个 spinner selection 填充,我已经研究了好几个小时了,仍然无法解决问题,没有错误洛格卡特。提前致谢。 这是我的代码 ArrayAdapter adapt
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 6 年前。 Improve this qu
我介绍一个Spinner在我的小部件中,每次我从中选择不同的值时,我都想执行一些操作。 是否可以? 我好像只收到事件 on_press和 on_release ,但在做出不同值(value)的选择时,
这是一个应用程序运行中的简单 gif,以显示我的意思:Video Gif here 我有一个 Spinner,这是我的 XML 代码: 我遵循了一些教程并浏览了此处,以使用 parse.com 动态
我有一个包含 1 个微调器的“发票”登记 Activity 。在这个 Spinner 中包含带有 IDCard 的卡片注册、标题和描述(保存在数据库的“Card”表中)。当我将此“发票”记录保存在“发
我在我的元素中实现了 mat-spinner,但它只有很少的可配置更改,例如颜色、旋转模式。我想在微调器中包含品牌/公司 Logo 的图像图标,我该如何实现? 以下是 Stackblitz 链接: h
在处理 Android Honeycomb 项目时,我偶然发现了一个有趣的问题。如下图所示,在对话框中展开 Spinner 时,底部的导航栏与它重叠。因此,无法选择底部的元素。 为了解决这个问题,我尝
当我在第一个微调器中选择中国作为国家/地区时,看到我想要的,所以我希望第二个微调器必须显示中国的所有州,这是通过我的代码完成的……但是……!我的查询是,当我从第二个微调器中选择状态时,它会自动将其设置
我正在尝试为应用创建一个简单的设置页面。 我想创建一个对象列表,我在 XML 文件中定义了其布局。 在这些对象的布局中有一个标题 TextView、一个帮助 TextView 和一个 Spinner。
我正面临这个问题,已经阅读了很多问题/答案但无法解决。 我有一个带有微调器的 ListView(用户必须为该行中的产品选择一个数量),但是当项目多于 View 并且在微调器中选择一个数字后滚动 Lis
我是一名优秀的程序员,十分优秀!