我试图在android代码中实现一种打印json echo的方法;但不仅仅是一个简单的回声,而是一个adob代码;所以admob广告单元将在服务器的json文件中,我把它调成android代码如下:Json文件如下:
{
"ads":{
"inter":"ca-app-pub-3940256099942544/1033173712"
}
}
有可能这样做吗?所以我可以从服务器中的文件更改admob代码而不更新商店中的应用程序? 如果是这样,android代码将负责将该字符串提取到应用程序中。
我的代码是:
public class MainActivity extends AppCompatActivity {
private RecyclerView mRecyclerView;
private RecyclerView.LayoutManager mLayoutManager;
private List<Song> songList;
private SongAdapter songAdapter;
// URL of object to be parsed
String JsonURL = "http://xxxxx.com/ads.json";
// This string will hold the results
String data = "";
RequestQueue requestQueue;
//TODO: full screen ad
private InterstitialAd mInterstitialAd;
//TODO: selected item
private int mPosition;
String[] names = {"test1", "test2", "test3", "test4", "test5", "test6"};
String[] singers = {"test1", "test2", "test3", "test4", "test5", "test6"};
int[] pics = {
R.drawable.tip1,
R.drawable.tip1,
R.drawable.tip1,
R.drawable.tip1,
R.drawable.tip1,
R.drawable.tip1};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
setupActionBar();
requestQueue = Volley.newRequestQueue(this);
JsonObjectRequest obreq = new JsonObjectRequest(Request.Method.GET, JsonURL,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
try {
JSONObject obj = response.getJSONObject("ads");
String Inter = obj.getString("inter");
data = Inter;
}
catch (JSONException e) {
e.printStackTrace();
}
}
},
new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
Log.e("Volley", "Error");
}
}
);
requestQueue.add(obreq);
//Use this setting to improve performance if you know that changes in
//the content do not change the layout size of the RecyclerView
if (mRecyclerView != null) {
mRecyclerView.setHasFixedSize(true);
}
//using a linear layout manager
mLayoutManager = new LinearLayoutManager(this);
//use this in case of gridlayoutmanager
//mLayoutManager = new GridLayoutManager(this,2);
//use this in case of Staggered GridLayoutManager
//mLayoutManager = new StaggeredGridLayoutManager(2, StaggeredGridLayoutManager.VERTICAL);
mRecyclerView.setLayoutManager(mLayoutManager);
//intializing an arraylist called songlist
songList = new ArrayList<>();
//adding data from arrays to songlist
for (int i = 0; i < names.length; i++) {
Song song = new Song(names[i], singers[i], i + 1, pics[i]);
songList.add(song);
}
//initializing adapter
songAdapter = new SongAdapter(songList);
//specifying an adapter to access data, create views and replace the content
mRecyclerView.setAdapter(songAdapter);
songAdapter.notifyDataSetChanged();
mRecyclerView.addOnItemTouchListener(new RecyclerItemClickListener(this, new RecyclerItemClickListener.OnItemClickListener() {
@Override
public void onItemClick(View view, int position) {
// TODO: check condition it should whether show ad or not
Integer[] adPositions = {1,2}; // list of ad positions
if (!Arrays.asList(adPositions).contains(position)) {
goToItem(position);
return;
}
// TODO: check ad is loaded before showing
if (mInterstitialAd.isLoaded()) {
mPosition = position;
mInterstitialAd.show();
} else {
goToItem(position);
}
}
}));
// TODO:init ad
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(data);
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
requestNewInterstitial();
goToItem(mPosition);
}
});
//TODO: load new ad
requestNewInterstitial();
}
//TODO: load new ad
private void requestNewInterstitial() {
AdRequest adRequest = new AdRequest.Builder()
.build();
mInterstitialAd.loadAd(adRequest);
}
//TODO: open item at position
private void goToItem(int position) {
switch (position) {
case 0:
startActivity(new Intent(MainActivity.this, Test1Activity.class));
break;
case 1:
startActivity(new Intent(MainActivity.this, Test2Activity.class));
break;
case 2:
startActivity(new Intent(MainActivity.this, Test3Activity.class));
break;
case 3:
startActivity(new Intent(MainActivity.this, Test4Activity.class));
break;
case 4:
startActivity(new Intent(MainActivity.this, Test5Activity.class));
break;
case 5:
startActivity(new Intent(MainActivity.this, Test6Activity.class));
break;
default:
break;
}
}
private void setupActionBar() {
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
// Show the Up button in the action bar.
actionBar.setDisplayHomeAsUpEnabled(true);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == android.R.id.home) {
finish();
return true;
}
return super.onOptionsItemSelected(item);
}
}
修改
代码工作正常,但有一件事是应用程序崩溃(有时候)当我点击打开一个活动,该活动将显示插入到项目之前的插页式广告代码。我不希望应用程序崩溃。
我认为有时候无法连接到服务器,这就是它崩溃的原因(这只在插页式广告上),nativeExpress总是很好连接或不连接。
我不希望该应用程序崩溃,无论如何都要验证与服务器的连接,或者如果成功则强制它首先连接到服务器&gt;加载&gt;节目 如果没有连接到服务器,只需忽略并转到该项目。
答案 0 :(得分:0)
echo
通过HTTP(S)连接向客户端发送文本。
因此,据我所知,您希望从服务器检索admob id,以使用特定的id值显示admob横幅。
要检索一些数据,您可以使用任何所需的库。
,例如,排球https://developer.android.com/training/volley/simple.html
final TextView mTextView = (TextView) findViewById(R.id.text);
...
// Instantiate the RequestQueue.
RequestQueue queue = Volley.newRequestQueue(this);
String url ="http://www.google.com";
// Request a string response from the provided URL.
StringRequest stringRequest = new StringRequest(Request.Method.GET, url,
new Response.Listener<String>() {
@Override
public void onResponse(String response) {
// Display the first 500 characters of the response string.
mTextView.setText("Response is: "+ response.substring(0,500));
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
mTextView.setText("That didn't work!");
}
});
// Add the request to the RequestQueue.
queue.add(stringRequest);
或,JSOUP库https://jsoup.org/download
`compile 'org.jsoup:jsoup:1.10.2'`
用法
Document doc = Jsoup.connect(URL).get();
修改强>
我想说,只有在检索data
变量(即admob键)后才需要初始化插页式广告。
我是您当前的代码,您在检索回调之前尝试初始化interstital。
我能提出什么建议?
在成功回调中移动初始化。
即,
@Override
public void onResponse(JSONObject response) {
try {
JSONObject obj = response.getJSONObject("ads");
String Inter = obj.getString("inter");
data = Inter;
//HERE YOU NEW CODE
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId(data);
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdClosed() {
requestNewInterstitial();
goToItem(mPosition);
}
});
requestNewInterstitial();
//新代码结束 } catch(JSONException e){ e.printStackTrace(); } }
不要忘记从前一个位置删除此注入;)