안 드 로 이 드 는 택배 번호 조회 택배 상태 정 보 를 실현
dependencies {
compile fileTree(include: ['*.jar'], dir: 'libs')
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:24.1.1'
testCompile 'junit:junit:4.12'
compile 'com.squareup.okhttp3:okhttp:3.6.0'
compile 'com.google.code.gson:gson:2.2.4'
}
레이아웃 파일 을 보 겠 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.yjp.deliverynoquerydemo.MainActivity">
<Spinner
android:id="@+id/delivery_company_spinner"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:entries="@array/delivery_company"/>
<EditText
android:id="@+id/delivery_no_edit_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:hint="@string/please_enter_delivery_no"
android:inputType="number"/>
<Button
android:id="@+id/query_button"
android:layout_gravity="center"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="@string/query"/>
<ListView
android:id="@+id/messages_list_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:listSelector="@android:color/transparent"/>
</LinearLayout>
ListView 에서 사용 할 item 의 레이아웃
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/time_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textStyle="bold"
android:textAppearance="?android:textAppearanceMedium"
android:typeface="monospace"/>
<TextView
android:id="@+id/context_text_view"
android:layout_width="match_parent"
android:layout_height="50dp"
android:textAppearance="?android:textAppearanceSmall"
android:typeface="monospace"/>
</LinearLayout>
자원 파일,우선 strings.xml
<resources>
<string name="app_name"> </string>
<string name="please_enter_delivery_no"> </string>
<string name="query"> </string>
<string name="query_url">http://www.kuaidi100.com/query</string>
</resources>
여기 서 우 리 는 택배 100 의 인 터 페 이 스 를 사용 한 후에 arrays.xml 를 보 았 다.
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="delivery_company">
<item> </item>
<item>EMS</item>
<item> </item>
</string-array>
<string-array name="delivery_company_id">
<item>shunfeng</item>
<item>ems</item>
<item>kuaijiesudi</item>
</string-array>
</resources>
3 개 택배 회사 의 조회 만 했 고 다른 지원 도 많 았 습 니 다.화면 은 그림 과 같 습 니 다.다음은 코드 를 보 겠 습 니 다.저 희 는 응용 프로그램 류 를 사용자 정의 합 니 다.주로 자원 을 통 해 표 구동 법 으로 택배 회사 의 중국어 이름과 요청 할 때의 회사 인 코딩 맵 표를 동적 으로 구축 합 니 다.
package com.yjp.deliverynoquerydemo.global;
import android.app.Application;
import com.yjp.deliverynoquerydemo.R;
import java.util.HashMap;
import java.util.Map;
public class MyApplication extends Application {
private Map<String, String> mDeliveryCompanyTable = new HashMap<>();
public String getDeliveryCompanyNo(String deliveryCompanyName) throws RuntimeException {
if (mDeliveryCompanyTable.isEmpty()) {
String[] names = getResources().getStringArray(R.array.delivery_company);
String[] ids = getResources().getStringArray(R.array.delivery_company_id);
if (names.length != ids.length) {
throw new RuntimeException();
}
for (int i = 0; i < names.length; i++) {
mDeliveryCompanyTable.put(names[i], ids[i]);
}
}
return mDeliveryCompanyTable.get(deliveryCompanyName);
}
}
그 다음 에 모델 로 가 져 온 택배 상태 정 보 를 기록 합 니 다.
package com.yjp.deliverynoquerydemo.modal;
import java.util.List;
public class DeliveryMessages {
//
private String nu;
//
private String com;
//
private List<Message> data;
//
public static class Message {
// , - - : :
private String time;
//
private String context;
public String getTime() {
return time;
}
public void setTime(String time) {
this.time = time;
}
public String getContext() {
return context;
}
public void setContext(String context) {
this.context = context;
}
}
public String getNu() {
return nu;
}
public void setNu(String nu) {
this.nu = nu;
}
public String getCom() {
return com;
}
public void setCom(String com) {
this.com = com;
}
public List<Message> getData() {
return data;
}
public void setData(List<Message> data) {
this.data = data;
}
}
http 를 통 해 택배 정 보 를 얻 을 수 있 는 도구 클래스 입 니 다.여기 서 okHttp 3 와 gson 을 사 용 했 습 니 다.
package com.yjp.deliverynoquerydemo.tools;
import com.google.gson.Gson;
import com.yjp.deliverynoquerydemo.modal.DeliveryMessages;
import java.io.IOException;
import java.net.SocketTimeoutException;
import java.util.Map;
import java.util.concurrent.TimeUnit;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;
public class DeliveryMessageGetter {
//
public interface DeliveryMessageGetterListener {
void onSuccess(DeliveryMessages deliveryMessages);
void onFailure(String errorStr);
}
//okHttp
private OkHttpClient mOkHttpClient = new OkHttpClient.Builder()
.readTimeout(10, TimeUnit.SECONDS)
.writeTimeout(10, TimeUnit.SECONDS)
.connectTimeout(10, TimeUnit.SECONDS)
.build();
// GET
public void getAsync(final String url,
final Map<String, String> params,
final DeliveryMessageGetterListener listener) {
// URL
String requestString = url;
if (!params.isEmpty()) {
requestString += "?";
for (Map.Entry<String, String> entry : params.entrySet()) {
requestString += entry.getKey() + "=" + entry.getValue() + "&";
}
requestString = requestString.substring(0, requestString.length() - 1);
}
// Request
final Request request = new Request.Builder()
.url(requestString)
.build();
//
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
if(e.getCause().equals(SocketTimeoutException.class)) {
listener.onFailure(" ");
} else {
listener.onFailure(" ");
}
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String messages = response.body().string();
Gson gson = new Gson();
DeliveryMessages deliveryMessages = gson.fromJson(messages, DeliveryMessages.class);
if (deliveryMessages != null) {
listener.onSuccess(deliveryMessages);
} else {
listener.onFailure(" ");
}
}
});
}
}
마지막 으로 저희 메 인 액 티 비 티.
package com.yjp.deliverynoquerydemo;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Spinner;
import android.widget.Toast;
import com.yjp.deliverynoquerydemo.global.MyApplication;
import com.yjp.deliverynoquerydemo.modal.DeliveryMessages;
import com.yjp.deliverynoquerydemo.tools.DeliveryMessageGetter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import static com.yjp.deliverynoquerydemo.modal.DeliveryMessages.Message;
public class MainActivity extends AppCompatActivity implements DeliveryMessageGetter.DeliveryMessageGetterListener {
private List<Map<String, String>> mQueryData = new ArrayList<>();
private SimpleAdapter mQueryAdapter;
private Spinner mDeliveryCompanySpinner;
private EditText mDeliveryNoEditText;
private ProgressDialog mQueryWaitDialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDeliveryCompanySpinner = (Spinner) findViewById(R.id.delivery_company_spinner);
mDeliveryNoEditText = (EditText) findViewById(R.id.delivery_no_edit_text);
Button queryButton = (Button) findViewById(R.id.query_button);
ListView messagesListView = (ListView) findViewById(R.id.messages_list_view);
queryButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//
if (0 == mDeliveryNoEditText.getText().length()) {
Toast.makeText(MainActivity.this, " ", Toast.LENGTH_SHORT).show();
return;
}
// ProgressDialog
mQueryWaitDialog = new ProgressDialog(MainActivity.this);
mQueryWaitDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mQueryWaitDialog.setMessage(" ...");
mQueryWaitDialog.show();
//
int selectedPosition = mDeliveryCompanySpinner.getSelectedItemPosition();
String deliveryCompanyName =
getResources().getStringArray(R.array.delivery_company)[selectedPosition];
Map<String, String> params = new HashMap<>();
params.put("type",
((MyApplication)getApplication()).getDeliveryCompanyNo(deliveryCompanyName));
params.put("postid", mDeliveryNoEditText.getText().toString());
//
mQueryData.clear();
//
DeliveryMessageGetter getter = new DeliveryMessageGetter();
getter.getAsync(getResources().getString(R.string.query_url),
params, MainActivity.this);
}
});
mQueryAdapter = new SimpleAdapter(this,
mQueryData,
R.layout.query_list_item_layout,
new String[] {"time", "context"},
new int[] {R.id.time_text_view, R.id.context_text_view});
messagesListView.setAdapter(mQueryAdapter);
}
@Override
public void onSuccess(DeliveryMessages deliveryMessages) {
List<Message> messages = deliveryMessages.getData();
for (Message message : messages) {
Map<String, String> map = new HashMap<>();
map.put("time", message.getTime());
map.put("context", message.getContext());
mQueryData.add(map);
}
queryComplete(" ");
}
@Override
public void onFailure(String errorStr) {
final String hint = errorStr;
queryComplete(" ");
}
private void queryComplete(final String toast) {
MainActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mQueryAdapter.notifyDataSetChanged();
mQueryWaitDialog.dismiss();
Toast.makeText(MainActivity.this, toast, Toast.LENGTH_SHORT).show();
}
});
}
}
주로 인 터 페 이 스 를 호출 하여 기능 을 실현 하고 코드 가 비교적 이해 하기 쉬 우 며 더 이상 군말 하지 않 는 다.마지막 으로 Manifest 파일 드 리 겠 습 니 다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.yjp.deliverynoquerydemo">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:name=".global.MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity"
android:windowSoftInputMode="stateHidden">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
기본 애플 리 케 이 션 클래스 를 바 꾼 다음 MainActivity 가 기본적으로 소프트 키 보드 를 꺼 내지 않도록 합 니 다.이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.